Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Rendered • View rawDownload


README.md v4.5.0-rc.2 (1394a44a) Text, 15.98 KB

Reticulum MeshChatX


A extensively modified and feature-rich fork of Reticulum MeshChat by Liam Cottle.

This project is independent from the original Reticulum MeshChat project and is not affiliated with it.

• Website: meshchatx.com
• Official Mirror: github.com/Sudo-Ivan/MeshChatX - Also used for Windows and MacOS builds for the moment.
• Changelog: CHANGELOG.md
• TODO: Boards

Important Changes from Reticulum MeshChat

• Uses LXST
• Replaced Peewee ORM with raw SQL.
• Replaced Axios with native fetch.
• Uses latest Electron.
• .whls ships with webserver and built-in frontend assets for more deployment options.
• i18n
• PNPM and Poetry for dependency management.

│ [!WARNING] MeshChatX is not guaranteed to be wire/data compatible with older Reticulum MeshChat
│ releases. Back up data before migration/testing.

│ [!WARNING] Legacy systems are not fully supported yet. Current baseline is Python T383838>=3.11 and Node
│ T383838>=22 (Electron uses Node 22; CI may use newer).

Requirements

• Python T383838>=3.11 (from T383838pyproject.toml)
• Node.js T383838>=22 (from T383838package.json)
• pnpm T38383810.32.1 (from T383838package.json)
• Poetry (used by T383838Taskfile.yml and CI workflows)

T282828
task install
task lint:all
task test:all
task build:all

Install Methods

Use the method that matches your environment and packaging preference.

┌───────────────────────┬──────────────────────────┬─────────────────────────────────────────┬─────┐
│ Method │ Includes frontend assets │ Architectures │ Be… │
├───────────────────────┼──────────────────────────┼─────────────────────────────────────────┼─────┤
│ Docker image │ Yes │ T383838linux/amd64, T383838linux/arm64 │ Fa… │
│ Python wheel (T383838.whl) │ Yes │ Any Python-supported architecture │ He… │
│ Linux AppImage │ Yes │ T383838x64, T383838arm64 │ Po… │
│ Debian package (T383838.deb) │ Yes │ T383838x64, T383838arm64 │ De… │
│ RPM package (T383838.rpm) │ Yes │ CI-runner dependent for published arti… │ Fe… │
│ From source │ Built locally │ Host architecture │ De… │
└───────────────────────┴──────────────────────────┴─────────────────────────────────────────┴─────┘

Notes:

• The release workflow explicitly builds Linux T383838x64 and T383838arm64 AppImage + DEB.
• RPM is also attempted by release workflow and uploaded when produced.

Quick Start: Docker

T282828
docker compose up -d

Default compose file maps:

• T383838127.0.0.1:8000 on host -> container port T3838388000
• T383838./meshchat-config -> T383838/config for persistence

If your local T383838meshchat-config permissions block writes, fix ownership:

T282828
sudo chown -R T79c0ff1000:1000 ./meshchat-config


Install from Release Artifacts

1) Linux AppImage (x64/arm64)

1. Download T383838ReticulumMeshChatX-v<version>-linux-<arch>.AppImage from releases.
2. Make it executable and run:

T282828
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage

2) Debian/Ubuntu T383838.deb (x64/arm64)

1. Download T383838ReticulumMeshChatX-v<version>-linux-<arch>.deb.
2. Install:

T282828
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb

3) RPM-based systems

1. Download T383838ReticulumMeshChatX-v<version>-linux-<arch>.rpm if present in the release.
2. Install with your distro tool:

T282828
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm

4) Python wheel (T383838.whl)

Release wheels include the built web assets.

T282828
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless

T383838pipx is also supported:

T282828
pipx install ./reticulum_meshchatx-*-py3-none-any.whl

Run from Source (Web Server Mode)

Use this when developing or when you need a local custom build.

T282828
git clone https://git.quad4.io/RNS-Things/MeshChatX.git
Tffa657cd MeshChatX
corepack Tffa657enable
pnpm config Tffa657set verify-store-integrity Tffa657true
pnpm install --frozen-lockfile
pip install Ta5d6ff"poetry==2.3.4"
poetry check --lock
poetry install
pnpm run build-frontend
poetry run python -m meshchatx.meshchat --headless --host T79c0ff127.0.0.1


Notes on the install commands above:

• T383838pnpm install --frozen-lockfile refuses to update T383838pnpm-lock.yaml and fails if the lockfile does not match T383838package.json. This is what blocks an unexpected upstream version from being silently pulled in.
• T383838verify-store-integrity=true is also set in the project T383838.npmrc; the explicit T383838pnpm config set line above just hardens the user-level config too.
• Lifecycle scripts (T383838preinstall/T383838postinstall) are blocked by default in pnpm v10+. Only the packages listed under T383838pnpm.onlyBuiltDependencies in T383838package.json are allowed to run install scripts (currently T383838electron, T383838electron-winstaller, T383838esbuild).
• T383838poetry check --lock fails fast if T383838poetry.lock is out of sync with T383838pyproject.toml; T383838poetry install then resolves only from the lockfile.
• For a strict lockfile-only Poetry install (no implicit lockfile refresh), pin Poetry with T383838pip install "poetry==2.3.4" to match what CI uses.

If you intentionally want to update dependencies, run T383838pnpm update / T383838poetry update in a dedicated commit and review the resulting lockfile diff before pushing.

Run sandboxed (Linux)

To run the native T383838meshchatx binary (alias: T383838meshchat) with extra filesystem isolation, you can use Firejail or Bubblewrap (T383838bwrap) while keeping normal network access for Reticulum and the web UI. Full examples (pip/pipx, Poetry, USB serial notes) are in:


The same page appears in the in-app Documentation list (MeshChatX docs) when served from the bundled or synced T383838meshchatx-docs files.

Linux desktop: emoji fonts

The emoji picker renders standard Unicode emoji using your system fonts (Electron/Chromium). If emoji show as empty squares (“tofu”), install a color emoji package and restart the app.

┌────────────────────────────┬──────────────────────────────────────────────────────────────────┐
│ Family (examples) │ Package │
├────────────────────────────┼──────────────────────────────────────────────────────────────────┤
│ Arch Linux, Artix, Manjaro │ T383838noto-fonts-emoji (T383838sudo pacman -S noto-fonts-emoji) │
│ Debian, Ubuntu │ T383838fonts-noto-color-emoji (T383838sudo apt install fonts-noto-color-emoji) │
│ Fedora │ T383838google-noto-emoji-color-fonts
└────────────────────────────┴──────────────────────────────────────────────────────────────────┘

After installing, run T383838fc-cache -fv if glyphs still fail until the next login. Optional: T383838noto-fonts for broader symbol coverage on minimal installs.

Build Desktop Packages from Source

These scripts are defined in T383838package.json and T383838Taskfile.yml.

Linux x64 AppImage + DEB

T282828
pnpm run dist:linux-x64

Linux arm64 AppImage + DEB

T282828
pnpm run dist:linux-arm64

RPM

T282828
pnpm run dist:rpm

Or through Task:

T282828
task dist:fe:rpm

Architecture Support Summary

• Docker image: T383838amd64, T383838arm64
• Linux AppImage: T383838x64, T383838arm64
• Linux DEB: T383838x64, T383838arm64
• Windows: T383838x64, T383838arm64 (build scripts available)
• macOS: build scripts available (T383838arm64, T383838universal) for local build environments
• Android: native APKs — ABIs T383838arm64-v8a, T383838x86_64, T383838armeabi-v7a (32-bit ARM), plus universal

Android

MeshChatX supports native Android APK builds (not only Termux).

Build APKs from source

From repo root:

T282828
T8b949e# 1) Build Chaquopy wheels used by android/app/build.gradle
bash scripts/build-android-wheels-local.sh

T8b949e# 2) Build both APK variants
Tffa657cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease


APK outputs (ABI splits plus a universal APK; see T383838splits { abi { ... } } in T383838android/app/build.gradle):

Debug (T383838android/app/build/outputs/apk/debug/):

• T383838app-arm64-v8a-debug.apk (ARM64 devices)
• T383838app-x86_64-debug.apk (x86_64 emulators)
• T383838app-armeabi-v7a-debug.apk (32-bit ARM devices)
• T383838app-universal-debug.apk (all bundled ABIs in one package)

Release (T383838android/app/build/outputs/apk/release/):

• T383838app-arm64-v8a-release-unsigned.apk
• T383838app-x86_64-release-unsigned.apk
• T383838app-armeabi-v7a-release-unsigned.apk
• T383838app-universal-release-unsigned.apk

Notes:

• Release outputs are unsigned by default unless you configure signing.
• If you only need one variant, run T383838:app:assembleDebug or T383838:app:assembleRelease.
• Android targets the ABIs listed in T383838android/app/build.gradle (including T383838armeabi-v7a when enabled). Building wheels for T383838armeabi-v7a needs an Android SDK on T383838ANDROID_HOME (see T383838android/README.md).
• You can override ABI selection per build with T383838-PmeshchatxAbis=<comma-separated list>, for example T383838-PmeshchatxAbis=armeabi-v7a. Universal APKs are emitted only when multiple ABIs are selected.

Additional docs:


Configuration

MeshChatX supports both CLI args and env vars.

┌────────────────────────┬──────────────────────────────────────┬──────────────┬───────────────────┐
│ Argument │ Environment Variable │ Default │ Description │
├────────────────────────┼──────────────────────────────────────┼──────────────┼───────────────────┤
│ T383838--host │ T383838MESHCHAT_HOST │ T383838127.0.0.1 │ Web server bind … │
│ T383838--port │ T383838MESHCHAT_PORT │ T3838388000 │ Web server port │
│ T383838--no-https │ T383838MESHCHAT_NO_HTTPS │ T383838false │ Disable HTTPS │
│ T383838--ssl-cert / T383838--ssl-key │ T383838MESHCHAT_SSL_CERT / T383838MESHCHAT_SSL_KEY │ (none) │ PEM certificate … │
│ T383838--rns-log-level │ T383838MESHCHAT_RNS_LOG_LEVEL │ (none) │ Reticulum (RNS) … │
│ T383838--headless │ T383838MESHCHAT_HEADLESS │ T383838false │ Do not auto-laun… │
│ T383838--auth │ T383838MESHCHAT_AUTH │ T383838false │ Enable basic auth │
│ T383838--storage-dir │ T383838MESHCHAT_STORAGE_DIR │ T383838./storage │ Data directory │
│ T383838--public-dir │ T383838MESHCHAT_PUBLIC_DIR │ auto/bundled │ Frontend files d… │
└────────────────────────┴──────────────────────────────────────┴──────────────┴───────────────────┘

Branches

┌────────┬─────────────────────────────────────────────────────────────────┐
│ Branch │ Purpose │
├────────┼─────────────────────────────────────────────────────────────────┤
│ T383838master │ Stable releases. Production-ready code only. │
│ T383838dev │ Active development. May contain breaking or incomplete changes. │
└────────┴─────────────────────────────────────────────────────────────────┘

Development

Common tasks from T383838Taskfile.yml:

T282828
task install
task lint:all
task test:all
task build:all

T383838Makefile shortcuts are also available:

┌──────────────┬─────────────────────────────────────────┐
│ Command │ Description │
├──────────────┼─────────────────────────────────────────┤
│ T383838make install │ Install pnpm and poetry dependencies │
│ T383838make run │ Run MeshChatX via poetry │
│ T383838make build │ Build frontend │
│ T383838make lint │ Run eslint and ruff │
│ T383838make test │ Run frontend and backend tests │
│ T383838make clean │ Remove build artifacts and node_modules │
└──────────────┴─────────────────────────────────────────┘

Versioning

Current version in this repo is T3838384.5.0.

• T383838package.json is the JavaScript/Electron version source.
• T383838meshchatx/src/version.py is synced from T383838package.json using:

T282828
pnpm run version:sync

For release consistency, keep version fields aligned where required (T383838package.json, T383838pyproject.toml, T383838meshchatx/__init__.py).

Security

Security and integrity details:

• Built-in integrity checks and HTTPS/WSS defaults in app runtime
• CI scanning workflows in T383838.gitea/workflows/

Adding a Language

Locale discovery is automatic. Add a new file under T383838meshchatx/src/frontend/locales/ (for example T383838xx.json) with the same keys as T383838en.json and a top-level T383838_languageName string for the label shown in the language selector. You can copy T383838en.json and translate every value by hand; machine-assisted generation is optional and never required.

Optional: Argos Translate bootstrap -- If you want a machine-generated first draft from T383838en.json, you can use T383838scripts/argos_translate.py. It handles formatting, color output, and helps protect interpolation variables (like T383838{count}) from accidental edits.

T282828
T8b949e# Install argostranslate if you haven't already
pipx install argostranslate

T8b949e# Run the translation script
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name Ta5d6ff"Your Language Name"


After any machine-assisted pass, have an LLM or a human reviewer verify grammar, context, and tone (for example formal vs informal).

Run T383838pnpm test -- tests/frontend/i18n.test.js --run to verify key parity with T383838en.json.

No other code changes are required. The app, language selector, and tests all discover locales from the T383838meshchatx/src/frontend/locales/ directory at build time.

Credits

Liam Cottle - Original Reticulum MeshChat
RFnexus - micron parser JavaScript work
markqvist - Reticulum, LXMF, LXST

License

Project-owned portions are licensed under 0BSD.
Original upstream portions from Reticulum MeshChat remain under MIT.
See LICENSE for full text and notices.


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────